#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define High 25
#define Width 80
int cells[High][Width];
int speed = 10;
int k = 0;




void HideCursor() //隐藏光标 
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};  
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void gotoxy(int x,int y) 
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}



void start()//数据初始化 
{
	int i, j;
	for (i = 0; i < High; i ++){
		for (j = 0; j < Width; j ++){
			cells[i][j] = rand() % 2;
		}
	}
	srand((unsigned int)time(NULL));


	HideCursor(); 		

}



void show()//显示画面 
{
	gotoxy(0,0);
	int i, j;
	for (i = 0; i < High; i ++){
		for (j = 0; j < Width; j ++){
			if (cells[i][j] == 1)
				printf ("*");
			else
				printf (" ");

		}
		printf ("\n");
	}

}

void updateWithoutInput()//与输入无关的更新
{
	int i, j;
	int NewCells[High][Width]; 
	int NeibourNumber; 
	k++;
	if (k >= speed){
	for (i = 1; i < High- 1; i ++){
		for (j = 1; j < Width - 1; j ++){
			NeibourNumber = cells[i-1][j-1] + cells[i-1][j] + cells[i-1][j+1]
				+ cells[i][j-1] + cells[i][j+1] + cells[i+1][j-1] + cells[i+1][j] + cells[i+1][j+1];
			if (NeibourNumber==3)
				NewCells[i][j] = 1;  
			else if (NeibourNumber==2)
				NewCells[i][j] = cells[i][j];
			else
				NewCells[i][j] = 0;
			
		}
	}
	for (i=1;i<=High-1;i++){
		for (j=1;j<=Width-1;j++){
			cells[i][j] = NewCells[i][j];
		}
	}

	k = 0;
	}
	

}

void updateWithInput()//与输入有关的更新 
{
	char input;
	if(kbhit())  
	{
		input = getch();  	
			if (input == 'a')   
				speed = speed - 1;  
			if (input == 'd')
				speed = speed + 1;  
	}
		
}

int main()
{
	start();
	while (1){
		updateWithInput();
		updateWithoutInput();
		show();
	}
	

	
	return 0;
	
}

